The evolution of computer architectures ranging from the vacuum tube technology and binary machine language programming of yesteryear to today's complex and high-speed computers all share at least one goal, which is to achieve high performance and reliability. In the earliest days of computing, designs were typically tested by manually probing access points in the system, which facilitated design verification and error discovery. The advent of semiconductor chips introduced smaller, more efficient systems, but testing still typically involved manual detection of problems. As software became more effective and popular, software compiling and debugging tools allowed computer programs to be more easily tested, yet hardware was still tested by analyzing signals at hardware access points. Test systems often included the use of dedicated connectors on printed circuit boards (PCBs), “bed-of-nails” test facilities, and the like. These systems, while useful in their day, are of diminishing value in the modern computer era, where in some cases computers can reside on a single chip. Even large-scale computers, while increasing in computational power, have been greatly reduced in size through the use of programmable logic devices, application-specific integrated circuits (ASICs), etc. Thus, while aggregating computational power into a small number of chips is highly beneficial to increase computer performance and marketability, it has made collecting information for purposes of testing, debugging and servicing increasingly challenging.
As integrated circuits continue to operate at faster speeds and have greater cell densities, it becomes more difficult to detect errors and capture information that assists in locating and identifying the errors. For example, as ASICs continue to become more densely populated, an increasing amount of the ASIC circuitry is embedded and unavailable for direct monitoring. Information from within the ASIC must somehow be captured and provided externally for analysis.
The information collected may be used for debugging problems found during the simulation and hardware checkout phases. Initial errors occurring during the design phase can be corrected with the help of an effective debugging mechanism. The information may also be used for analyzing problems reported from customer sites, as it is imperative that error discovery and analysis be provided in order to service customers without having to replace an entire system. The performance of the particular computer system under analysis can also be gauged by collecting and monitoring information generated by an operational computer system.
Prior data capturing methods lack flexibility of use, and are difficult to use in debugging hardware information and in servicing computer hardware. These existing systems have limited resources in collecting data. For example, prior art data capturing methods may have a predefined amount of information that is periodically gathered and dumped for analysis. However, as system complexity increases, and more information is embedded and thus unavailable for direct analysis, the information collected may be of limited value, or may require massive amounts of memory to store the predefined amount of information, or may require extensive dissection of the information once collected. Such a system is inflexible and cumbersome, and does not selectively target the desired information.
Accordingly, there is a need for an effective debugging mechanism and methodology that will capture and record a large volume of information, while providing the flexibility to control when, and which, of the total set of information is to be collected at a given time. It would also be beneficial for such a mechanism and methodology to allow control of the data capture to facilitate analyzation of the contents of specific registers in the system when necessary. Further, it would provide great benefit to allow targeted information to be captured during normal system operation, where controllability of the selection of information and time of capture is controllable during normal operation of the system clocks. The present invention provides such a system, and provides a flexible, accurate information collection system and method for debugging and servicing computer systems. The present invention therefore provides a solution to the aforementioned and other shortcomings of the prior art, and offers additional benefits and advantages over the prior art.